// 导入数据库操作
const { sqlOne, sqlBatch } = require('../db/common')
// 加密工具包bcryptjs
const bcrypt = require('bcryptjs')
// 引入jwt
const jwt = require('jsonwebtoken')
// 引入加密字符串
const config = require('../utils/config')
// 导入工具
const utils = require('../utils/index')

// 成功响应 onSuccess 失败响应 onError

// 数据库表 user 列 id username  password  context role  isType  

// 登录函数
exports.login = async (req, res) => {
  const userinfo = req.body
  // 判断用户是否存在
  const sql = 'select * from user where username = ?'
  const results = await sqlOne(sql, userinfo.username)
  if (results.length === 0) {
    return res.onError("您输入的用户名不存在，请重新输入！")
  }
  // 用户名ok 验证密码 
  // 1.先将密码加密后 再与数据库对比
  const compareResult = bcrypt.compareSync(userinfo.password, results[0].password)
  // 判断密码是否正确
  if (!compareResult) {
    return res.onError("密码错误，登录失败！")
  }
  // 判断账号是否有效
  if(results[0].isType === 0){
    return res.onError("该用户未生效，有问题请联系管理员！")
  }
  // 2.用username生成token对象，响应回去
  const user = { ...results[0], password: '' }
  const tokenStr = jwt.sign(user, config.jwtSecretKey, { expiresIn: '1h' })
  res.onSuccess({
    status: 0,
    message: "登录成功！",
    data: { token: 'Bearer ' + tokenStr }
  })
}

// 注册用户
exports.register = async (req, res) => {
  // 生成uuid
  const userinfo = { ...req.body, id: utils.guid(),isType:0,role:0}
  // 判断用户是否存圠
  const sql = 'select * from user where username = ?'
  const results = await sqlOne(sql, userinfo.username)
  if (results.length > 0) {
    return res.onError("该用户名已存在，要不要换一个试试？")
  }
  // 密码加工
  userinfo.password = bcrypt.hashSync(userinfo.password, 10)
  // 插入数据处理 插入 id username password
  const sql2 = 'insert into user (id,username,password) values (?,?,?)'
  const results2 = await sqlOne(sql2, [userinfo.id, userinfo.username, userinfo.password])
  if (results2.affectedRows !== 1) {
    return res.onError("注册失败！")
  }
  res.onSuccess(null,"注册成功")

}